/**
 * 数据字典 hook
 * @author luguoxiang
 * @date 2024-06-19
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
import { ref } from 'vue';
import { toMap } from '@/soar/utils/data';
import { getDicts } from '@/api/common';

/**
 * 使用数据字典，用于翻译字典值（格式：{ [value]: label }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDict(codes: string | string[]) {
  if (typeof codes === 'string') {
    codes = codes.split(',');
  }

  const exports: any = {};
  for (const code of codes) {
    exports[code] = ref({});
  }

  getDicts(codes).then((res: any) => {
    res = res.data;
    for (const code of codes) {
      const dict = res[code];
      exports[code].value = toMap(dict, 'value', 'label');
    }
  });

  return exports;
}

/**
 * 使用数据字典，用于反向映射字段值（格式：{ [label]: value }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMapper(codes: string | string[]) {
  if (typeof codes === 'string') {
    codes = codes.split(',');
  }

  const exports: any = {};
  for (const code of codes) {
    exports[code] = ref({});
  }

  getDicts(codes).then((res: any) => {
    res = res.data;
    for (const code of codes) {
      const dict = res[code];
      exports[code].value = toMap(dict, 'label', 'value');
    }
  });

  return exports;
}

/**
 * 使用数据字典（格式：{ [value]: dict }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMap(codes: string | string[]) {
  if (typeof codes === 'string') {
    codes = codes.split(',');
  }

  const exports: any = {};
  for (const code of codes) {
    exports[code] = ref({});
  }

  getDicts(codes).then((res: any) => {
    res = res.data;
    for (const code of codes) {
      const dict = res[code];
      exports[code].value = toMap(dict, 'value', (x: any) => x);
    }
  });

  return exports;
}

/**
 * 使用数据字典，用于反向映射字典（格式：{ [label]: dict }）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictMapperMap(codes: string | string[]) {
  if (typeof codes === 'string') {
    codes = codes.split(',');
  }

  const exports: any = {};
  for (const code of codes) {
    exports[code] = ref({});
  }

  getDicts(codes).then((res: any) => {
    res = res.data;
    for (const code of codes) {
      const dict = res[code];
      exports[code].value = toMap(dict, 'label', (x: any) => x);
    }
  });

  return exports;
}

/**
 * 使用数据字典（格式：dict[]）
 * @param codes 字典code，支持多个（“,”隔开或者字符串数组）
 */
export function useDictList(codes: string | string[]) {
  if (typeof codes === 'string') {
    codes = codes.split(',');
  }

  const exports: any = {};
  for (const code of codes) {
    exports[code] = ref({});
  }

  getDicts(codes).then((res: any) => {
    res = res.data;
    for (const code of codes) {
      exports[code].value = res[code];
    }
  });

  return exports;
}
